package com.boat.framework.common.thread.context;

import java.util.HashMap;
import java.util.Map;

import org.springframework.core.NamedThreadLocal;

import lombok.extern.slf4j.Slf4j;

/**
 * 应用上下文
 * 
 * @author 周江
 *
 */
@Slf4j
public class AppContext {
	private static final String KEY_APPCONTEXT = "AppContext";
	private static final ThreadLocal<Object> CONTEXT = new NamedThreadLocal<>("应用上下文信息");

	public static void setContext(Object context) {
		CONTEXT.set(context);
	}

	public static <T> T getContext() {
		return (T) CONTEXT.get();
	}

	public static boolean isEmptyOfContext() {
		return CONTEXT.get() == null ? true : false;
	}

	public static void clear() {
		if (log.isDebugEnabled()) {
			log.debug("清理AppContext:{}", CONTEXT.get());
		}
		CONTEXT.remove();
	}

	// ------复制和恢复上下文
	public static Map<String, Object> getCopyOfContextMap() {
		Map<String, Object> contextMap = new HashMap<>(4);
		contextMap.put(KEY_APPCONTEXT, getContext());
		return contextMap;
	}

	public static void setContextMap(Map<String, Object> contextMap) {
		if (contextMap.get(KEY_APPCONTEXT) != null) {
			setContext(contextMap.get(KEY_APPCONTEXT));
		}
	}
}
